package com.bto.solar.work.fdd.client;

import com.bto.solar.work.common.BizException;
import com.fasc.open.api.bean.base.BaseRes;
import com.fasc.open.api.bean.common.OpenId;
import com.fasc.open.api.enums.common.IdTypeEnum;
import com.fasc.open.api.exception.ApiException;
import com.fasc.open.api.utils.ResultUtil;
import com.fasc.open.api.v5_1.client.DocClient;
import com.fasc.open.api.v5_1.client.OrgClient;
import com.fasc.open.api.v5_1.req.org.GetMemberListFilter;
import com.fasc.open.api.v5_1.req.org.GetMemberListReq;
import com.fasc.open.api.v5_1.res.org.EmployeeInfo;
import com.fasc.open.api.v5_1.res.org.GetMemberListRes;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.List;

@Slf4j
@Service
public class FddOrgClient {

    @Value("${fdd.open-crop-id}")
    private String openCorpId;
    @Autowired
    private FddBaseClient fddBaseClient;

    /**
     * 创建成员管理客户端
     */
    public OrgClient getOrgClient() {
        return new OrgClient(fddBaseClient.getFddOpenApiClient());
    }

    /**
     * 查询企业成员列表
     */
    public List<EmployeeInfo> getCorpMemberList() {
        try {
            GetMemberListReq req = new GetMemberListReq();
            req.setAccessToken(fddBaseClient.getFddAccessToken());
            //法大大平台为该企业在该应用appId范围内分配的唯一标识。
            req.setOwnerId(openCorpId);
            //（可选）查询条件
            GetMemberListFilter filter = new GetMemberListFilter();
            //部门Id
            filter.setDeptId(null);
            //如果为true，则同时获取其所有子部门员工; 如果为false或者不传，则只获取当前部门员工,默认为true
            filter.setFetchChild(true);
            //角色类型，如传该字段，表示查询该角色的成员,目前只支持super_admin：超级管理员；如不传，表示查询所有成员
            filter.setRoleType("super_admin");
            req.setListFilter(filter);
            //（可选）查询结果分页返回，此处指定第几页，如果不传默从第一页返回。页码从1开始，即首页为1
            req.setListPageNo(1);
            //（可选）指定每页多少条数据，如果不传默认为100，单页最大100
            req.setListPageSize(100);
            BaseRes<GetMemberListRes> res = getOrgClient().getMemberList(req);
            fddBaseClient.isResultSuccess(res, "法大大查询企业成员列表失败");
            return res.getData().getEmployeeInfos();
        } catch (ApiException e) {
            throw new BizException("getCorpMemberList is 法大大查询企业成员列表失败 {}", e);
        }


    }
}
